package iso3.pt.model;

import java.util.*;

import org.hibernate.*;
import org.hibernate.cfg.Configuration;

public class Test
{

	SessionFactory sessionFactory;

	public Test()
	{
		sessionFactory = new Configuration().configure().buildSessionFactory();
	}

	public void inserciones1()
	{

		Session session = sessionFactory.openSession();
		Transaction tx = session.beginTransaction();

		Asignatura asi1 = new Asignatura(1, 1, "Ingenieria del Software", 7);
//		Asignatura asi2 = new Asignatura(2, 2, "Servicios - ESIDE", 5);
//
		Profesor profe1 = new Profesor(1111111, "aaaa", "Asier Perallos",
				"profesor", "perallos@eside.deusto.es", "530D");
//		Profesor profe2 = new Profesor(222, 2222222, "bbbb",
//				"Diego Lopez de Ipina", "profesor", "dipina@eside.deusto.es",
//				"531D");
//		Profesor profe3 = new Profesor(333, 3333333, "cccc", "Maite Sanchez",
//				"secretaria", "msanchez@eside.deusto.es", "532D");
//		Profesor profe4 = new Profesor(444, 4444444, "dddd", "Ana Carrera",
//				"secretaria", "acarrera@eside.deusto.es", "533D");

		Alumno alum1 = new Alumno(1111, "aaaa", "Ander", "677111111");

//		Alumno alum2 = new Alumno(2222, "bbbb", "Jose", "677222222");

		Unidad uni1 = new Unidad("JSP", "Tecnologías JSP", "Contiene");
//		Unidad uni2 = new Unidad(1, "PHP", "Tecnologías PHP", "Contiene...");
//		Unidad uni3 = new Unidad(1, "Java", "Tecnologías Java", "Contiene...");

		
		// Guardo profesor
		session.save(profe1);
		
		// Asigno profesor y guardo asignatura
		asi1.setProfesor(profe1);
		session.save(asi1);
		
		// Añado unidad y guardo unidad
		asi1.addUnidad(uni1);
		session.save(uni1);
		
		// Guardo alumno
		session.save(alum1);
		
		// Relaciono Alumno y Asignatura
		asi1.addAlumno(alum1);
		alum1.addAsignatura(asi1);
		session.save(asi1);
		session.save(alum1);
		
		
		Evaluacion eva1 = new Evaluacion("Examen", (float) 9.5);
		
		// Añado asignatura y alumno a la evaluación y guardo la evaluación
		eva1.setAsignatura(asi1);
		eva1.setAlumno(alum1);
		alum1.addEvaluacion(eva1);
		session.save(eva1);

		tx.commit();
		session.close();
		System.out.println("Done inserciones1!");
	}

	public void busquedaPK()
	{

//		Session session = sessionFactory.openSession();
//		Transaction tx = session.beginTransaction();
//
//		Profesor emp1 = (Profesor) session.get(Profesor.class, 111);
//		System.out.println(emp1);
//		emp1.setNombre("Asier Perallos Ruiz");
//		session.flush();
//
//		Asignatura dep = emp1.getDepartamento();
//		System.out.println(dep);
//
//		Set<Profesor> empleados = dep.getEmpleados();
//		for (Iterator<Profesor> iter = empleados.iterator(); iter.hasNext();)
//		{
//			Profesor emp2 = iter.next();
//			System.out.println(emp2);
//		}
//
//		tx.commit();
//		session.close();
//		System.out.println("Done busquedaPK!");
	}

	public void inserciones2()
	{

//		Session session = sessionFactory.openSession();
//		Transaction tx = session.beginTransaction();
//
//		Direccion dir1 = new Direccion("Calle1 - Bilbao", 48007);
//		Direccion dir2 = new Direccion("Calle2 - Portugalete", 48920);
//
//		session.save(dir1);
//		session.save(dir2);
//
//		Profesor emp1 = (Profesor) session.get(Profesor.class, 111);
//		Profesor emp2 = (Profesor) session.get(Profesor.class, 222);
//
//		dir1.addEmpleado(emp1);
//		dir1.addEmpleado(emp2);
//
//		emp1.addDireccion(dir1);
//		emp2.addDireccion(dir1);
//
//		dir2.addEmpleado(emp1);
//		emp1.addDireccion(dir2);
//
//		tx.commit();
//		session.close();
//		System.out.println("Done inserciones2!");

	}

	public void busquedaCompleja()
	{

//		Session session = sessionFactory.openSession();
//		Transaction tx = session.beginTransaction();
//
//		List<Profesor> empleados = session
//				.createQuery(
//						"from Empleado as emp where emp.departamento.nombre = 'Servicios - ESIDE' and emp.puesto = 'secretaria'")
//				.list();
//
//		for (Iterator<Profesor> iter = empleados.iterator(); iter.hasNext();)
//		{
//			Profesor emp1 = iter.next();
//			System.out.println(emp1);
//		}
//
//		tx.commit();
//		session.close();
//		System.out.println("Done busquedaCompleja!");

	}

	public void borrado()
	{

//		Session session = sessionFactory.openSession();
//		Transaction tx = session.beginTransaction();
//
//		Profesor emp1 = (Profesor) session.get(Profesor.class, 222);
//
//		Set<Direccion> direcciones = emp1.getDirecciones();
//
//		for (Iterator<Direccion> iter = direcciones.iterator(); iter.hasNext();)
//		{
//			Direccion dir = iter.next();
//			emp1.removeDireccion(dir);
//		}
//		emp1.getDirecciones().clear();
//		emp1.getDepartamento().removeEmpleado(emp1);
//
//		session.delete(emp1);
//
//		tx.commit();
//		session.close();
//		System.out.println("Done borrado!");
	}

	public void inserciones3()
	{

//		Session session = sessionFactory.openSession();
//		Transaction tx = session.beginTransaction();
//
//		Asignatura dep3 = new Asignatura("Comercial");
//
//		Alumno ext1 = new Alumno(555, "Externo1", "profesor",
//				"ext1@unicomer.es", "Iberdrola", "ext1@iberdrola.es",
//				"bla, bla,...");
//
//		ext1.setDepartamento(dep3);
//		dep3.addEmpleado(ext1);
//
//		session.save(dep3);
//		session.save(ext1);
//
//		Alumno ext = (Alumno) session.get(Alumno.class, 555);
//		System.out.println(ext);
//
//		tx.commit();
//		session.close();
//		System.out.println("Done inserciones3!");
	}

	public void close()
	{
		sessionFactory.close();
	}

	public static void main(String[] args)
	{
		Test t1 = new Test();
		t1.inserciones1();
//		t1.busquedaPK();
//		t1.inserciones2();
//		t1.busquedaCompleja();
//		t1.borrado();
//		t1.inserciones3();
		t1.close();
	}
}
